////////////////////////////////////////////////
// api方法封装
// 吴野
// 2022-08-31 20:10:45
////////////////////////////////////////////////
const files = require.context('./modules', true, /\.js$/)
const isConsoleApi = config.isConsoleApi; // 是否再控制台输出api配置表
let modules = {}
let consoleTable = []
files.keys().forEach(key => {
    let keyw = key.replace(/(\.\/|\.js)/g, '');
    let keyCh = keyw.split('/').splice(1, keyw.split('/').length).join('/');
    if (!modules.hasOwnProperty(keyw.split('/', 1)[0])) {
        modules[keyw.split('/', 1)[0]] = {}
    }
    let tabObj = {
        '模块名': keyw.split('/', 1)[0],
        '子模块路径': `${keyw.split('/', 1)[0]}:${keyCh}`,
        '加载API方式': `this.$Api.get(['${keyw.split('/', 1)[0]}:${keyCh}',......])`,
    }
    consoleTable.push(tabObj)
    modules[keyw.split('/', 1)[0]][keyCh] = files(key).default
})
if (isConsoleApi) {
    console.table(consoleTable)
}

/**
* 函数描述
* @param {Array} pathStr ['onemap:otherModule']
* @param {Object} api 返回调取接口方法
* 注意：方法名称不能重复
*/
export default {
    get: function (pathStr) {
        let api = {}
        let apiTable = []
        if (pathStr == undefined || pathStr == null || pathStr.length == 0) {
            icu.log.capsule('api请求错误', '传入参数错误', 'error')
            return false;
        }
        for (let i = 0; i < pathStr.length; i++) {
            const strItem = pathStr[i];
            let strArray = strItem.split(':');
            if (!modules.hasOwnProperty(strArray[0])) {
                icu.log.capsule('API-模块', `【${strArray[0]}】无此系统模块！`, 'error');
            } else {
                let thisModule = modules[strArray[0]];
                if (!thisModule.hasOwnProperty(strArray[1])) {
                    icu.log.capsule('API-模块', `【${strArray[1]}】无子模块！`, 'error');
                } else {
                    for (const key in thisModule[strArray[1]]) {
                        if (thisModule[strArray[1]].hasOwnProperty.call(thisModule[strArray[1]], key)) {
                            const itemCh = thisModule[strArray[1]][key];
                            api[key] = itemCh;
                            let objT = {
                                '模块参数': `${strItem}`,
                                '模块方法': key
                            };
                            apiTable.push(objT);
                        }
                    }
                }
            }
        }
        if (isConsoleApi) {
            console.log(`------------------【${pathStr.join('】【')}】API方法----------------------`)
            console.table(apiTable)
        }
        return api
    }
}